<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>js是单线程的</title>
</head>
<body>
    
<!-- 
    1. 如何证明 js 执行是单线程的 ？
        - setTimeout()的回调函数是在主线程执行的
        - 定时器回调函数只有在运行栈中的代码全部执行完后才有可能执行
    2. 为什么js 要用单线程模式，而不是多线程模式 ?
        - JavaScript的单线程，与他的用途有关
        - 作为浏览器脚本语言，JavaScript的主要用途是与用户互动，以及操作DOM
        - 这决定了它只能是单线程，否则会带来很复杂的同步问题
    3. 代码的分类：
        - 初始化代码
        - 回调代码
    4. js 引擎执行代码的基本流程
        - 先执行初始化代码：包含一些特别的代码dd
            设置定时器
            绑定监听
            发送 Ajax请求
        - 后面再某个时刻才会执行回调代码
 -->

<script type="text/javascript">
    setTimeout(function(){
        console.log('time - 2000')
        alert('2222222222')
    },2000)

    setTimeout(function(){
        console.log('time - 1000')
        alert('111111111111')
    },1000)

    function fn(){
        console.log('fn()')
    }
    fn()
    console.log('al之前')
    alert('-----') // 暂停当前主线程的执行， 同时暂停计时，点击确定后，恢复程序执行 和计时
    console.log('al之后')
</script>
</body>
</html>